/*
 * @(#)Service.java
 *
 * Copyright 2012 by ShenY BIS, All rights reserved.
 */

package com.bis.framework.base.service;

import java.util.List;
import java.util.Map;

import com.bis.framework.base.entity.BaseEntity;
import com.bis.framework.util.common.CommonSqlUtil;
import com.bis.framework.util.common.Page;
import com.bis.framework.util.common.PageData;

/**
 * Base Service Interface
 * 
 * @author BIS 2012-12-24
 */
public interface Service
{
    /**
     * 1.保存实体类数据。
     * @Description:
     * @param objBaseEntity
     */
    public void saveObj(BaseEntity objBaseEntity);

    /**
     * 2.保存实体类列表数据。
     * @Description:
     * @param objList
     */
    public void saveObj(List objList);

    /**
     * 3.更新实体类数据。
     * @Description:
     * @param objBaseEntity
     * @param commonSqlUtil
     */
    public void updateObj(BaseEntity objBaseEntity, CommonSqlUtil objCommonSqlUtil);

    /**
     * 4.更新实体类全字段。
     * @Description:
     * @param objBaseEntity
     */
    public void updateObjAllPropertiesById(BaseEntity objBaseEntity);

    /**
     * 5.根据实体类主键进行数据删除。
     * @Description:
     * @param objBaseEntity
     */
    public void deleteObjById(BaseEntity objBaseEntity);

    /**
     * 6.根据实体类数据列表主键进行数据删除。
     * @Description:
     * @param lstObj
     */
    public void deleteObjById(final List<BaseEntity> lstObj);

    /**
     * 7.查询数据分页信息。
     * @Description:
     * @param strNameSpace
     * @param objMap
     * @param objPage
     * @return
     */
    public PageData queryPagingData(String strNameSpace, Map objMap, Page objPage);

    /**
     * 8.根据给定的实体类进行数据查询。
     * @Description:
     * @param strNameSpace
     * @param objBaseEntity
     * @return
     */
    public List selectByEntity(String strNameSpace, BaseEntity objBaseEntity);

    /**
     * 9.根据主键进行数据查询。
     * @Description:
     * @param strNameSpace
     * @param objID
     * @return
     */
    public Object selectByPrimaryKey(String strNameSpace, Object objID);

    /**
     * 10.根据主键进行数据删除。
     * @Description:
     * @param strNameSpace
     * @param strKey
     */
    public void deleteByPrimaryKey(String strNameSpace, String strKey);

    /**
     * 11.根据主键列表进行数据删除。
     * @Description:
     * @param strNameSpace
     * @param objKeys
     */
    public void deleteByPrimaryKey(String strNameSpace, List objKeys);

    /**
     * 12.对数据记录Count进行验证。
     * @Description:
     * @param targetClass
     * @param inputValue
     * @param originalityValue
     * @return
     */
    public Integer checkNameDuplication(Class objTargetClass, String strInputValue, String strOriginalityValue);

    /**
     * 13.根据条件列表用存储过程进行数据分页查询。
     * @Description:
     * @param strNameSpaceAndId
     * @param objMapCondition
     * @param objPage
     * @return
     */
    public PageData queryPagingDataByProc(String strNameSpaceAndId, Map objMapCondition, Page objPage);

    /**
     * 14.根据条件列表用存储过程进行数据查询。
     * @Description:
     * @param strNameSpaceAndId
     * @param objMapCondition
     * @return
     */
    public List queryDataByProc(String strNameSpaceAndId, Map objMapCondition);
}
